1
現代C++の効率性と表現力
AI013Lesson 3
00:00

現代C++(C++11/14/17)は ゼロコスト抽象化 低レベルなハードウェア制御と高レベルな可読性の間のギャップを埋めます。効率性は決定論的なメモリ管理によって得られ、表現力はコンパイル時論理によって強化されます。

1. メモリレイアウト:std::array と std::vector

std::array は、Cスタイル配列の現代的なラッパーであり、 スタック上 に割り当てられ、サイズはコンパイル時に既知です。一方、 std::vectorヒープ上 に存在し、動的に拡張されます。一方、 std::vector は幾何学的成長係数(通常 $1.5\times$ または $2\times$)を使用しますが、現代のC++では shrink_to_fit() 未使用容量を回収する機能を提供しており、ゴルーグのようなマネージド言語よりもより厳密な制御が可能です。

2. SFINAE と型安全性

通過して std::enable_if および std::is_enumにより、開発者は 置換失敗はエラーではない(SFINAE)を実装できます。これにより、コンパイラは型特性に基づいて特定の関数オーバーロードを選択でき、例えばその std::underlying_typeを使って列挙型用の汎用ストリーム演算子を作成することが可能になります。

// C++11 メモリ管理のハイライト
v.push_back(std::move(obj)); // ムーブセマンティクス
arr.at(0); // 境界チェック
main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>